/**
 * @description: 重写pushState replaceState ，因为这两个api不会触发popstate监听事件
 * @param {*} T
 * @return {*}
 */
export const createHistoryEvent = <T extends keyof History>(type: T) => {
  const origin = window.history[type];

  return function (this: any) {
    // 执行原生方法
    const res = origin.apply(this, arguments);
    // 自定义事件
    const event = new Event(type);
    // 触发自定义事件
    window.dispatchEvent(event);

    return res;
  };
};
